package 作用域相关;

import java.util.Map;

public abstract class 作用域符号 extends 符号 implements 作用域 {
    public 作用域符号(String 名称) {
        super(名称);
    }

    @Override
    public String 取作用域名() {
        return 名称;
    }

    @Override
    public 作用域 取父作用域() {
        return 父作用域;
    }

    @Override
    public void 定义(符号 符号) {
        取符号表().put(符号.名称, 符号);
        符号.父作用域 = this;
    }

    @Override
    public 符号 解析(String 名称) {
        // 先在本作用域内找，如果找不到就到父作用域中找
        if (取符号表().containsKey(名称)) {
            return 取符号表().get(名称);
        }

        if (父作用域 != null) {
            return 父作用域.解析(名称);
        }

        return null;
    }
    
    public abstract Map<String, 符号> 取符号表();
}
